Последовательность Фибоначчи задана
следующим образом:
a0 = 0
a1 = 1
ak = ak-1 + ak-2
Для заданного числа n найдите значение n-го элемента an
последовательности Фибоначчи.
Вход. Одно
натуральное число n (1 ≤ n ≤ 40).
Выход. Выведите n-ый элемент последовательности
Фибоначчи.
Пример
входа 1 |
Пример
выхода 1 |
2 |
1 |
|
|
Пример
входа 2 |
Пример
выхода 2 |
5 |
5 |
РЕШЕНИЕ
числа Фибоначчи
В данной задаче следует найти n-ое число Фибоначчи. При n ≤ 40 рекурсивная
реализация пройдет по времени. Последовательность Фибоначчи имеет вид:
Наибольшим числом Фибоначчи,
которое повещается в тип int является
f46 = 1836311903
При n ≤ 40 достаточно использовать тип
данных int.
Пусть функция fib(n) вычисляет n-ое число
Фибоначчи. Тогда имеем следующее
рекуррентное соотношение:
fib(n)
=
Функция fib вычисляет n-ое число
Фибоначчи.
int fib(int n)
{
if (n == 0) return 0;
if (n == 1) return 1;
return fib(n - 1) + fib(n - 2);
}
Основная часть программы. Читаем
значение n, вычисляем и выводим fib(n).
scanf("%d", &n);
printf("%d\n", fib(n));
Java реализация
import java.util.*;
public class Main
{
static int f(int n)
{
if (n == 0) return 0;
if (n == 1) return 1;
return f(n-1) + f(n - 2);
}
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
System.out.println(f(n));
con.close();
}
}
Python реализация – мемоизация
Функция fib вычисляет n-ое число
Фибоначчи.
def fib(n):
if dp[n] != -1:
return dp[n]
dp[n] = fib(n - 1) + fib(n - 2)
return dp[n]
Основная часть программы. Читаем входное значение n.
n = int(input())
Инициализируем список dp.
dp = (n + 1) * [-1]
dp[0] = 0
dp[1] = 1
Вычисляем и выводим ответ.
print(fib(n))
Python реализация – мемоизация 2
arr = {}
Функция fib вычисляет n-ое число
Фибоначчи.
def fib(n):
if (n ==
0): return 0
if (n ==
1): return 1
if n not in
arr:
arr[n] = fib(n - 1) +
fib(n - 2)
return
arr[n]
Основная часть программы. Читаем
значение n, вычисляем и выводим fib(n).
n = int(input())
print(fib(n))
Python реализация – мемоизация 3
arr = {0:0, 1:1}
Функция fib вычисляет n-ое число Фибоначчи.
def fib(n):
if arr.get(n) is None:
arr[n] = fib(n - 1) + fib(n - 2)
return
arr[n]
Основная часть программы. Читаем значение n и выводим fib(n).
n = int(input())
print(fib(n))
Python реализация – TLE
Функция fib вычисляет n-ое число Фибоначчи.
def fib(n):
if (n == 0): return
0
if (n == 1): return
1
return
fib(n - 1) + fib(n - 2)
Основная часть программы. Читаем значение n, вычисляем и выводим fib(n).
n = int(input())
print(fib(n))